home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
041-050
/
amok42
/
ewkal
/
ewkal.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
10KB
|
213 lines
(*********************************************************************
*
* :Program. Gibt für jedes Datum den Wochentag aus
* :Author. Hans Schafft
* :Address. Landfriedstraße 1A - Hinterhaus
* :Address. 6900 Heidelberg
* :Phone. 06221 - 22416
* :Version. 1.0
* :Date. 13.7.1990
* :Copyright. PD
* :Language. Oberon
* :Translator. Amiga Oberon Compiler 1.0, Demo Version
*
*********************************************************************)
MODULE ewKAL;
IMPORT d : Dos,s : SYSTEM, e : Exec, i : Intuition,g : Graphics;
CONST YPos1 = 20; YPos2 = 28; YPos3 = 36; YPos4 = 54; XPos1 = 20;
XPos2 = 45; XPos3 = 70; XPos4 = 142;
tzp = 0;tep = 1; mzp = 2; mep = 3; jtp = 4; jhp = 5; jzp = 6; jep = 7;
tzm = 8;tem = 9;mzm = 10;mem = 11;jtm = 12;jhm = 13;jzm = 14;jem = 15;
VAR monat,tag,jahr,len,p,wt,oberGrenze : INTEGER;
wiPtr : i.WindowPtr; scPtr : i.ScreenPtr; Datum : d.Date;rpPtr: g.RastPortPtr;
Gad : ARRAY 16 OF i.Gadget;moar : ARRAY 13,10 OF CHAR;tagName: ARRAY 7,10 OF CHAR;
wota : ARRAY 7,26 OF CHAR;
PROCEDURE FensterAuf(VAR wiPtr : i.WindowPtr);
VAR w : i.NewWindow; iPtr : i.IntuitionBasePtr;
BEGIN
w.leftEdge := 100; w.topEdge := 50;
w.width := 237; w.height := 110;
w.detailPen := 2; w.blockPen := 1;
w.title := s.ADR(" ewKAL © H.Schafft ");
w.flags := LONGSET{i.windowDepth,i.windowDrag,i.rmbTrap,i.activate,i.reportMouse,i.windowClose};
w.idcmpFlags := LONGSET{i.gadgetUp,i.mouseButtons,i.gadgetDown,i.closeWindow};
w.type := {i.wbenchScreen};
w.screen := NIL; w.minWidth := 240;
w.minHeight := 100; w.maxWidth := 240;
w.firstGadget := NIL; w.bitMap := NIL;
w.checkMark := NIL; w.maxHeight:= 100;
wiPtr := i.OpenWindow(w);
END FensterAuf;
PROCEDURE WochenTag(t,m,j : INTEGER);
VAR h,r,kh,kr,k : INTEGER;
BEGIN
IF m <= 2 THEN IF m = 2 THEN t := t + 31; END; m := 13;j := j - 1; END;
h := j DIV 100; r := j MOD 100; kh := h MOD 4; kr := r MOD 4;
IF m < 8 THEN k := 3; ELSE k := 7; END;
IF (m MOD 2) = 0 THEN k := 5; END;
wt := ((2000 * kh + 10 * (r - kr) + kr) + 1000 * m + 100 * k + t) MOD 7;
END WochenTag;
PROCEDURE ReadDiscDate;(* von Pit Burkhatdt auf AMOK#1 - leicht gekürzt *)
VAR n : LONGINT;
BEGIN d.DateStamp(s.ADR(Datum)); (* Datum von Startdisc lesen *)
n:=Datum.days-2251; jahr:=SHORT((4*n+3) DIV 1461); n:=n-1461*jahr DIV 4;
jahr:=jahr+84; monat:=SHORT((5*n+2) DIV 153); tag:=SHORT(n-(153*monat+2) DIV 5+1);
monat:=monat+3; IF (monat>12) THEN jahr:=jahr+1; monat:=monat-12; END; (*IF*)
jahr := jahr + 1900;
END ReadDiscDate;
PROCEDURE Auswerten(stelle : INTEGER);
BEGIN CASE stelle OF
| tzp : INC(tag,10); IF tag > oberGrenze THEN DEC(tag,10);END;
| tep : INC(tag); IF tag > oberGrenze THEN tag := 1;END;
| mzp : INC(monat,10);IF monat > 12 THEN DEC(monat,10);END;
| mep : INC(monat); IF monat > 12 THEN monat := 1;END;
| jtp : INC(jahr,1000);IF jahr > 9999 THEN DEC(jahr,10000);END;
| jhp : INC(jahr,100);IF jahr > 9999 THEN DEC(jahr,1000);END;
| jzp : INC(jahr,10);IF jahr > 9999 THEN DEC(jahr,100);END;
| jep : INC(jahr);IF jahr > 9999 THEN DEC(jahr);END;
| tzm : DEC(tag,10);IF tag = 0 THEN tag := oberGrenze;
ELSIF tag < 0 THEN INC(tag,10); END;
| tem : DEC(tag);IF tag = 0 THEN tag := oberGrenze;END;
| mzm : DEC(monat,10);IF monat <= 0 THEN INC(monat,10);END;
| mem : DEC(monat);IF monat <= 0 THEN monat := 12;END;
| jtm : DEC(jahr,1000);IF jahr < 0 THEN INC(jahr,10000); END;
| jhm : DEC(jahr,100);IF jahr < 0 THEN INC(jahr,1000);END;
| jzm : DEC(jahr,10);IF jahr < 0 THEN INC(jahr,100); END;
| jem : DEC(jahr);IF jahr < 0 THEN INC(jahr,10);END;
ELSE END;
END Auswerten;
PROCEDURE IDCMPAbfrage() : BOOLEAN;
VAR gadPtr : i.GadgetPtr;
msgPtr : i.IntuiMessagePtr;
class : LONGSET;
id : INTEGER;
BEGIN
e.WaitPort(wiPtr^.userPort);
REPEAT
msgPtr := e.GetMsg(wiPtr^.userPort);
UNTIL msgPtr # NIL ;
class := msgPtr^.class; gadPtr := msgPtr^.iAddress;
id := gadPtr^.gadgetID; e.ReplyMsg(msgPtr);
IF i.gadgetUp IN class THEN Auswerten(id); ELSE END;
IF i.closeWindow IN class THEN RETURN FALSE; ELSE RETURN TRUE; END;
END IDCMPAbfrage;
PROCEDURE PfeileUndTage;
VAR ar : ARRAY 2 OF CHAR;
BEGIN
wota[0] := "SA SO MO DI MI DO FR"; wota[1] := "SO MO DI MI DO FR SA";
wota[2] := "MO DI MI DO FR SA SO"; wota[3] := "DI MI DO FR SA SO MO";
wota[4] := "MI DO FR SA SO MO DI"; wota[5] := "DO FR SA SO MO DI MI";
wota[6] := "FR SA SO MO DI MI DO";
moar[1] := " Januar "; moar[2] := " Februar "; moar[3] := " März ";
moar[4] := " April "; moar[5] := " Mai "; moar[6] := " Juni ";
moar[7] := " Juli "; moar[8] := " August "; moar[9] := "September ";
moar[10] := " Oktober "; moar[11] := " November "; moar[12] := " Dezember ";
tagName[0] := "Samstag "; tagName[1] := "Sonntag "; tagName[2] := "Montag ";
tagName[3] := "Dienstag "; tagName[4] := "Mittwoch "; tagName[5] := "Donnerstag";
tagName[6] := "Freitag "; g.SetDrMd(rpPtr,g.jam1); ar := "^^";
g.SetAPen(rpPtr,3); g.Move(rpPtr,XPos1,YPos1-1); g.Text(rpPtr, s.ADR(ar),2);
g.Move(rpPtr,XPos2,YPos1-1); g.Text(rpPtr, s.ADR(ar),2); g.Move(rpPtr,XPos3,YPos1-1); g.Text(rpPtr, s.ADR(ar),2);
g.Text(rpPtr, s.ADR(ar),2); ar := "vv";
g.Move(rpPtr,XPos1,YPos3+1); g.Text(rpPtr, s.ADR(ar),2);
g.Move(rpPtr,XPos2,YPos3+1); g.Text(rpPtr, s.ADR(ar),2);
g.Move(rpPtr,XPos3,YPos3+1); g.Text(rpPtr, s.ADR(ar),2); g.Text(rpPtr, s.ADR(ar),2);
g.Move(rpPtr,XPos1-7,YPos4 + 10); g.Text(rpPtr,s.ADR(" 1 2 3 4 5 6 7"),26);
g.Move(rpPtr,XPos1-7,YPos4 + 20); g.Text(rpPtr,s.ADR(" 8 9 10 11 12 13 14"),26);
g.Move(rpPtr,XPos1-7,YPos4 + 30); g.Text(rpPtr,s.ADR("15 16 17 18 19 20 21"),26);
g.Move(rpPtr,XPos1-7,YPos4 + 40); g.Text(rpPtr,s.ADR("22 23 24 25 26 27 28"),26); ar := "^^";
g.SetAPen(rpPtr,2);g.Move(rpPtr,XPos1,YPos1); g.Text(rpPtr, s.ADR(ar),2);
g.Move(rpPtr,XPos2,YPos1); g.Text(rpPtr, s.ADR(ar),2);
g.Move(rpPtr,XPos3,YPos1); g.Text(rpPtr, s.ADR(ar),2);
g.Text(rpPtr, s.ADR(ar),2); ar := "vv";
g.Move(rpPtr,XPos1,YPos3); g.Text(rpPtr, s.ADR(ar),2);
g.Move(rpPtr,XPos2,YPos3); g.Text(rpPtr, s.ADR(ar),2);
g.Move(rpPtr,XPos3,YPos3); g.Text(rpPtr, s.ADR(ar),2);
g.Text(rpPtr, s.ADR(ar),2); g.SetDrMd(rpPtr,g.jam2); g.SetBPen(rpPtr,0);
END PfeileUndTage;
PROCEDURE Ausgabe;
VAR tar,mar : ARRAY 2 OF CHAR;jar : ARRAY 4 OF CHAR;y,x : INTEGER;err : BOOLEAN;
BEGIN WochenTag(tag,monat,jahr);
tar[0] := CHR(tag DIV 10 + 48); IF tag < 10 THEN tar[0] := " ";END;
tar[1] := CHR(tag MOD 10 + 48);
mar[0] := CHR(monat DIV 10 + 48); IF monat < 10 THEN mar[0] := " ";END;
mar[1] := CHR(monat MOD 10 + 48);
IF jahr < 1000 THEN jar[0] := " ";
ELSE jar[0] := CHR(jahr DIV 1000 + 48);
END;
x := jahr MOD 1000;
IF jahr < 100 THEN jar[1] := " ";
ELSE jar[1] := CHR(x DIV 100 + 48);
END;
x := x MOD 100;
IF jahr < 10 THEN jar[2] := " ";
ELSE jar[2] := CHR(x DIV 10 + 48);
END;
jar[3] := CHR(x MOD 10 + 48);
g.SetAPen(rpPtr,3); g.Move(rpPtr,XPos1,YPos2); g.Text(rpPtr, s.ADR(tar),2);
g.Move(rpPtr,XPos2,YPos2); g.Text(rpPtr, s.ADR(mar),2);
g.Move(rpPtr,XPos3,YPos2); g.Text(rpPtr, s.ADR(jar),4); g.SetAPen(rpPtr,1);
g.Move(rpPtr,XPos4,YPos2); g.Text(rpPtr, s.ADR(tagName[wt]),10);
WochenTag(1,monat,jahr); (* Die Wochentag - Leiste aktualisieren *)
g.Move(rpPtr,XPos1-8,YPos4-1); g.Text(rpPtr,s.ADR(wota[wt]),26);
g.Move(rpPtr,XPos4-33,YPos4 + 50); (* Monat und Jahr rechts unten *)
g.Text(rpPtr,s.ADR(moar[monat]),10); g.Text(rpPtr, s.ADR(jar),4);
IF monat = 12 THEN WochenTag(1,1,jahr+1);ELSE WochenTag(1,monat+1,jahr); END;
x := wt; y := 28;
REPEAT INC(y); WochenTag(y,monat,jahr); UNTIL x = wt;
g.SetAPen(rpPtr,3); g.Move(rpPtr,XPos1-7,YPos4 + 50);
CASE y OF
| 29 : g.Text(rpPtr,s.ADR(" "),10); | 30 : g.Text(rpPtr,s.ADR("29 "),10);
| 31 : g.Text(rpPtr,s.ADR("29 30 "),10); | 32 : g.Text(rpPtr,s.ADR("29 30 31"),10);
ELSE END; oberGrenze := y - 1;
END Ausgabe;
PROCEDURE InitGadget(le,te,wi,he,id : INTEGER);
VAR stelle : INTEGER;
BEGIN
Gad[id].leftEdge := le; Gad[id].topEdge := te;
Gad[id].width := wi; Gad[id].height := he;
Gad[id].flags := i.gadgHNone;
Gad[id].activation := {i.gadgImmediate,i.relVerify};
Gad[id].gadgetType := i.boolGadget; Gad[id].gadgetRender:= NIL;
Gad[id].gadgetText := NIL; Gad[id].mutualExclude := LONGSET{};
Gad[id].nextGadget := NIL; Gad[id].selectRender:= NIL;
Gad[id].specialInfo := NIL; Gad[id].userData := NIL;
Gad[id].gadgetID := id; stelle := i.AddGadget(wiPtr,s.ADR(Gad[id]),-1);
i.RefreshGadgets(s.ADR(Gad[id]),wiPtr,NIL);
END InitGadget;
PROCEDURE GadgetsEinrichten;
BEGIN
InitGadget(XPos1,YPos1-9,10,10,0); InitGadget(XPos1+8,YPos1-9,10,10,1);
InitGadget(XPos2,YPos1-9,10,10,2); InitGadget(XPos2+8,YPos1-9,10,10,3);
InitGadget(XPos3,YPos1-9,10,10,4); InitGadget(XPos3+8,YPos1-9,10,10,5);
InitGadget(XPos3+16,YPos1-9,10,10,6); InitGadget(XPos3+24,YPos1-9,10,10,7);
InitGadget(XPos1,YPos3-7,10,10,8); InitGadget(XPos1+8,YPos3-7,10,10,9);
InitGadget(XPos2,YPos3-7,10,10,10); InitGadget(XPos2+8,YPos3-7,10,10,11);
InitGadget(XPos3,YPos3-7,10,10,12); InitGadget(XPos3+8,YPos3-7,10,10,13);
InitGadget(XPos3+16,YPos3-7,10,10,14);InitGadget(XPos3+24,YPos3-7,10,10,15);
END GadgetsEinrichten;
(*****************************************************************************)
BEGIN
FensterAuf(wiPtr);rpPtr := wiPtr^.rPort;GadgetsEinrichten;ReadDiscDate;
PfeileUndTage;Ausgabe;
WHILE IDCMPAbfrage() DO
Ausgabe;
IF tag > oberGrenze THEN tag := oberGrenze; Ausgabe; END;
END;
CLOSE
IF wiPtr # NIL THEN i.CloseWindow(wiPtr); END;
END ewKAL.